package com.Advance.abstract_;
/*
1）有多个类，完成不同的任务job
2）要求能够得到各自完成任务的时间
 */
public class abstract_Template_introduce {
    public static void main(String[] args) {
        AA aa = new AA();
        aa.job();
        AA aa1 = new AA();
        aa1.job();
        AA2 aa2 = new AA2();
        aa2.cal();
    }
}
class AA{
    long num;
    long start;
    long end;
    public void job() {
        long start = System.currentTimeMillis();
        for (int i = 1; i <= 8000000; i++) {
            num *= i;
        }
        long end = System.currentTimeMillis();
        System.out.println("执行时间 " + (end - start));
    }
}
//现在我接着写另一个类
class AA1 {
    long num;
    long start;
    long end;
    public void job() {
        long start = System.currentTimeMillis();
        for (int i = 1; i <= 800; i++) {
            num *= i;
        }
        long end = System.currentTimeMillis();
        System.out.println("执行时间 " + (end - start));
    }
}
//如果再继续写，就会使代码很冗长，其实这里没有合理的利用带代码的重复性，操作起来很不方便，从而可以利用模板设计模式
//当然可以将设计一个方法使用
class AA2 {
    long num;
    long start;
    long end;
    public void cal() {
        long start = System.currentTimeMillis();
        job();//在此处进行修改即可
        long end = System.currentTimeMillis();
        System.out.println("执行时间 " + (end - start));
    }
    public void job() {
        for (int i = 1; i <= 999999999; i++) {
            num *= i;
        }
    }
    public void job2(){
        for (int i = 1; i <= 8000000; i++) {
            num *= i;
        }
    }
}
//但还是很不方便